Argmin
沿指定轴查找最小 topk 个值的索引。当 topk=1 时,该算子等价于 ArgMin。
\[Y_i = \underset{k}{\operatorname{argmin}} (X_{slice_i})\]
其中 \(X_{slice_i}\) 是输入张量中沿指定轴的一个切片,函数返回该切片中最小值的索引 \(k\)。
- 输入:
input - 输入数据地址。
output - 输出索引的数据地址,数据类型通常为int32。
output_value - (可选) 输出值的数据地址。
in_shape - 输入张量的维度信息数组。
in_strides - 输入张量的步长信息数组。
out_strides - 输出张量的步长信息数组。
arg_elements - 用于存放候选值的临时工作空间地址。
index - 用于存放候选索引的临时工作空间地址。
topk - 需要查找的最小值的数量。设置为1以执行ArgMin操作。
out_value - 是否返回数值的标志。若为非0,则 output_value 必须提供有效地址。
input_shape_size - 输入张量的维度数 (即 in_shape 数组的长度)。
axis - 执行查找操作的轴。
core_mask - 核掩码。
- 输出:
output - 存储索引的输出张量。
output_value - 如果 return_values 为 true,则此处存储找到的值。
- 支持平台:
FT78NEMT7004
备注
FT78NE 支持fp32
MT7004 支持fp16, fp32
共享存储版本:
-
void fp_argmin_s(float *input, void *output, float *output_value, int *in_shape, int *in_strides, int *out_strides, float *arg_elements, int *index, int topk, int out_value, int input_shape_size, int axis, int core_mask)
-
void hp_argmin_s(half *input, void *output, half *output_value, int *in_shape, int *in_strides, int *out_strides, half *arg_elements, int *index, int topk, int out_value, int input_shape_size, int axis, int core_mask)
C调用示例:
1//FT78NE示例
2#include <stdio.h>
3#include <argmin.h>
4int main(int argc, char* argv[]) {
5 float *input = (float *)0xA0000000; // input在DDR空间
6 int *output = (int *)0xB0000000; // output indices
7 float *output_value = (float *)0xC0000000; // output values
8 float *arg_elements = (float *)0xD0000000; // temp workspace 1
9 int *index = (int *)0xE0000000; // temp workspace 2
10
11 int in_shape[] = {2, 3, 4}; // input shape: (2, 3, 4)
12 int in_strides[] = {12, 4, 1}; // input strides for contiguous layout
13 int out_strides[] = {4, 1}; // output strides, shape is (2, 4)
14 int input_shape_size = 3;
15
16 int axis = 1; // 沿第1轴操作
17 int topk = 1; // ArgMax
18 int out_value = 1; // 同时返回值
19 int core_mask = 0xff;
20
21 fp_argmin_s(input, output, output_value, in_shape, in_strides, out_strides,
22 arg_elements, index, topk, out_value, input_shape_size, axis, core_mask);
23 return 0;
24}
私有存储版本:
-
void fp_argmin_p(float *input, void *output, float *output_value, int32_t *in_shape, int *in_strides, int *out_strides, float *arg_elements, int *index, int topk, int out_value, int input_shape_size, int axis)
-
void hp_argmin_p(half *input, void *output, half *output_value, int32_t *in_shape, int *in_strides, int *out_strides, half *arg_elements, int *index, int topk, int out_value, int input_shape_size, int axis)
C调用示例:
1//FT78NE示例
2#include <stdio.h>
3#include <argmin.h>
4int main(int argc, char* argv[]) {
5 float *input = (float *)0x10001000; // input在DDR空间
6 int *output = (int *)0x10002000; // output indices
7 float *output_value = (float *)0x10003000; // output values
8 float *arg_elements = (float *)0x10004000; // temp workspace 1
9 int *index = (int *)0x10005000; // temp workspace 2
10
11 int in_shape[] = {2, 3, 4}; // input shape: (2, 3, 4)
12 int in_strides[] = {12, 4, 1}; // input strides for contiguous layout
13 int out_strides[] = {4, 1}; // output strides, shape is (2, 4)
14 int input_shape_size = 3;
15
16 int axis = 1; // 沿第1轴操作
17 int topk = 1; // ArgMin
18 int out_value = 1; // 同时返回值
19
20 fp_argmin_p(input, output, output_value, in_shape, in_strides, out_strides,
21 arg_elements, index, topk, out_value, input_shape_size, axis);
22 return 0;
23}